Jak zjistit zda-li je zmacknut zaroven treba levy ctrl?
Otázka od: Petr Varga
18. 11. 2002 9:11
Ahoj
Mam takovy problem... No potrebuji zjistit zda-li
je s zmacnutim nejake klavesy (reaguji v onkeyup)
je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine
co jsem zatim nasel je GetKeyStatus. No to vraci neco ve smyslu ze
podle toho jestli vyssi bit toho bytu je jedna nebo nula a pod.. No
Tak to zkousim takto I:Byte
Begin
i:=GetKeyState(VK_LCONTROL);
If Hi(i)=1 then showmessage('Je zmacknuty i levy ctrl');
end;
No ale jak si to nefunguje.. Muzete nekdo poradit? Diky.. specha...
Petr Varga
--
---
Levná dovolená na Slovensku i v Čechách ...
http://web.volny.cz/cestovani/sk.php
Odpovedá: Jaroslav Buček
18. 11. 2002 10:19
> je s zmacnutim nejake klavesy (reaguji v onkeyup)
> je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine
if ssCtrl in Shift then
Ahoj, Jarda
Odpovedá: Peter Ondras
19. 11. 2002 9:55
(*
Tento maly program ti zisti stlacenie CTRL a ALT. Pristup k informacii mas
globalne totalne pre cely program. Vytvor si novu aplikaciu, vloz na formular
jeden button. Prirad mu udalost Button1Click do OnClick. Formularu prirad
udalost FormCreate do OnCreate.
*)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure AppIdle(Sender: TObject; var Done: Boolean);
end;
var
Form1: TForm1;
CtrlKey, AltKey: Boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (CtrlKey) and (not AltKey) then ShowMessage('Len CTRL')
else if (not CtrlKey) and (AltKey) then ShowMessage('Len ALT')
else if (CtrlKey) and (AltKey) then ShowMessage('Obe klavesy')
else ShowMessage('Ani jedna klavesa');
end;
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
//ctrl
if GetAsyncKeyState(VK_CONTROL) <> 0 then CtrlKey:=True
else if GetAsyncKeyState(VK_CONTROL) = 0 then CtrlKey:=False;
//alt
if GetAsyncKeyState(VK_MENU) <> 0 then AltKey:=True
else if GetAsyncKeyState(VK_MENU) = 0 then AltKey:=False;
//tu mozu ist kontroly na dalsie klavesy
Done:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:=AppIdle;
end;
end.
Peter Ondras
peter.ondras@pse.sk
(+421) 0904 421 925
>: -----Original Message-----
>: From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
>: Behalf Of Petr Varga
>: Sent: Monday, November 18, 2002 8:28 AM
>: To: delphi-l@clexpert.cz
>: Subject: Jak zjistit zda-li je zmacknut zaroven treba levy ctrl?
>:
>: Ahoj
>: Mam takovy problem... No potrebuji zjistit zda-li
>: je s zmacnutim nejake klavesy (reaguji v onkeyup)
>: je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine
>: co jsem zatim nasel je GetKeyStatus. No to vraci neco ve smyslu ze
>: podle toho jestli vyssi bit toho bytu je jedna nebo nula a pod.. No
>: Tak to zkousim takto I:Byte
>: Begin
>: i:=GetKeyState(VK_LCONTROL);
>: If Hi(i)=1 then showmessage('Je zmacknuty i levy ctrl');
>: end;
>:
>: No ale jak si to nefunguje.. Muzete nekdo poradit? Diky.. specha...
>:
>: Petr Varga
>:
>: --
>: ---
>: Levná dovolená na Slovensku i v Čechách ...
>: http://web.volny.cz/cestovani/sk.php